<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>WeakSet对象</title>
</head>
<body>
  <script>
    /**
     * 1. 参数只能是对象
     * 2. 和Set对象不同，它没有遍历方法
     * 3. 没有clear()，参数设置为null, 具有垃圾自动回收机制
    */

    // 1. 参数只能是对象
    let name = { name: 'name' };
    let age = { age: 18 };
    const sex = { sex: '男' };
    const arr = ['a'];
    const weakSet = new WeakSet([name, age]);
    weakSet.add(sex);
    weakSet.add(arr);
    weakSet.delete(arr);
    console.log(weakSet.has(sex)); // true
    console.log('weakSet', weakSet);

    // 2. 和Set对象不同，它没有遍历方法
    // for (const item of weakSet) { // weakSet is not iterable
    //   console.log(item);
    // }

    // weakSet.forEach(element => { // weakSet.forEach is not a function
    //   console.log(element);
    // });

    // 3. 没有clear()，参数设置为null, 具有垃圾自动回收机制
    // weakSet.size();
    // weakSet.clear();
    // 清除对象，在控制台再次打印weakSet可以看到少了两个对象
    name = null;
    age = null;
  </script>
</body>
</html>